import {
	ElMessage
} from 'element-plus'
import request from '../request/index.js'
import { saveAs } from 'file-saver';
class api {

	//----------------数据交互----------------------------
	static 提交方法 = async (方法名, ...参数) => {
		let 返回数据
		let 提交数据 = {
			方法名: 方法名,
			参数: 参数
		}
		await request({
			url: '/linask',
			method: 'POST',
			data: 提交数据
		}).then(res => {
			返回数据 = res.data
		}, err => {
			ElMessage.error("交互错误!" + err)
		})
		return 返回数据
	}
	static 下载方法 = async (方法名, ...参数) => {
		let 返回数据 = {}
		let 提交数据 = {
			方法名: 方法名,
			参数: 参数
		}
		await request({
			url: '/linfile',
			method: 'POST',
			data: 提交数据,
			responseType: 'blob'
		}).then(res => {
			// 处理响应数据
			let 标题 = decodeURI(res.headers.filename)
			let msg = decodeURI(res.headers.msg)
			let isok = decodeURI(res.headers.isok)
			返回数据.msg = msg
			返回数据.err = isok
			console.log(res.data)
			if (isok != "ok") {
				return 
			}
			let blob = new Blob([res.data])
			saveAs(blob, 标题)
		}, err => {
			ElMessage.error("交互错误!" + err)
		})
		return 返回数据
	}

	static 监听ws广播 = async (方法名, 响应方法) => {
		let 服务器地址 = ''
		await request({
			url: '/linask',
			method: 'POST',
			data: { 方法名: "lindk获取服务器地址lindk" }
		}).then(res => {
			服务器地址 = res.data
		}, err => {
			ElMessage.error(方法名 + "->监听ws广播 获取ws地址错误!" + err)
		})
		const ws链接 = new WebSocket(`ws://${服务器地址}/ws`);
		// 当 WebSocket 连接成功时触发
		ws链接.addEventListener('open', (event) => {
			ws链接.send(`{ "方法名": "${方法名}" }`)
		});
		// 当从服务器接收到消息时触发
		ws链接.addEventListener('message', (event) => {
			try{
				let 对象 = JSON.parse(event.data)
				响应方法(对象)
			}catch(error){
				响应方法(event.data)
			}
		});

	}

	static 监听ws标识 = async (方法名, 标识, 响应方法) => {
		let 服务器地址 = ''
		await request({
			url: '/linask',
			method: 'POST',
			data: { 方法名: "lindk获取服务器地址lindk" }
		}).then(res => {
			服务器地址 = res.data
		}, err => {
			ElMessage.error(方法名 + "->监听ws标识 获取ws地址错误!" + err)
		})
		const ws链接 = new WebSocket(`ws://${服务器地址}/ws`);
		// 当 WebSocket 连接成功时触发
		ws链接.addEventListener('open', (event) => {

			ws链接.send(`{ "方法名": "${方法名}","标识":"${标识}" }`)
		});
		// 当从服务器接收到消息时触发
		ws链接.addEventListener('message', (event) => {
			try{
				let 对象 = JSON.parse(event.data)
				响应方法(对象)
			}catch(error){
				响应方法(event.data)
			}
		});

	}
	static 注册全局方法() {
        window.提交方法 = this.提交方法
        window.下载方法 = this.下载方法
		window.监听ws广播 = this.监听ws广播
		window.监听ws标识 = this.监听ws标识
    }

}
// 自动注册到全局
api.注册全局方法()
export default api
